package rhplus.servico;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;
import javax.jdo.PersistenceManager;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import rhplus.acessoBD.PMF;

@PersistenceCapable
public class Consulta implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id_consulta;
    @Persistent
    private String especialidade;
    @Persistent
    private String estado;
    @Persistent
    private String data;
    @Persistent
    private Double preco;
    @Persistent
    private Long id_medico;
    @Persistent
    private Long id_pessoa;
    @Persistent
    private Long id_hospital;

    public Consulta(String especialidade, String estado, String data, Double preco, Long id_medico, Long id_pessoa, Long id_hospital) {
        this.especialidade = especialidade;
        this.estado = estado;
        this.data = data;
        this.preco = preco;
        this.id_medico = id_medico;
        this.id_pessoa = id_pessoa;
        this.id_hospital = id_hospital;
    }

    public String getData() {
        return data;
    }

    public String getEspecialidade() {
        return especialidade;
    }

    public String getEstado() {
        return estado;
    }

    public Long getId_consulta() {
        return id_consulta;
    }

    public Long getId_hospital() {
        return id_hospital;
    }

    public Long getId_medico() {
        return id_medico;
    }

    public Long getId_pessoa() {
        return id_pessoa;
    }

    public Double getPreco() {
        return preco;
    }

    public void setData(String data) {
        this.data = data;
    }

    public void setEspecialidade(String especialidade) {
        this.especialidade = especialidade;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public void setId_consulta(Long id_consulta) {
        this.id_consulta = id_consulta;
    }

    public void setId_hospital(Long id_hospital) {
        this.id_hospital = id_hospital;
    }

    public void setId_medico(Long id_medico) {
        this.id_medico = id_medico;
    }

    public void setId_pessoa(Long id_pessoa) {
        this.id_pessoa = id_pessoa;
    }

    public void setPreco(Double preco) {
        this.preco = preco;
    }

    public static void insere(Consulta c) {
        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.makePersistent(c);
        } finally {
            pm.close();
        }
    }

    public static Consulta devolve(Long id_consulta) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Consulta.class.getName()
                + " where id_consulta == "+ id_consulta;

        return ((List<Consulta>)pm.newQuery(query).execute()).get(0);
    }

    public static LinkedList<Consulta> devolveTodasCliente(Long id_pessoa, String estado) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Consulta.class.getName()
                + " where id_pessoa == "+ id_pessoa + " && estado == '" +estado+"'";

        List<Consulta> consultas =(List<Consulta>)pm.newQuery(query).execute();
        LinkedList<Consulta> lista = new LinkedList<Consulta>();

        for(Consulta c : consultas)
             lista.add(c);
       
        return lista;
    }

    public static List<Consulta> devolveTodasMedico(Long id_medico,String estado) {
        PersistenceManager pm = PMF.get().getPersistenceManager();

        String query = "select from " + Consulta.class.getName()
                + " where id_cliente == "+ id_medico+ " && estado == '" +estado+"'";

        return (List<Consulta>)pm.newQuery(query).execute();
    }

    public static void actualizaEstadoConsulta(Consulta c, String estado){
        PersistenceManager pm = PMF.get().getPersistenceManager();
        try {
            pm.currentTransaction().begin();
            // We don't have a reference to the selected Product.
            // So we have to look it up first,
            Consulta consult = pm.getObjectById(Consulta.class, c.getId_consulta());

            consult.setEstado(estado);
            pm.makePersistent(consult);
            pm.currentTransaction().commit();
        } catch (Exception ex) {
            pm.currentTransaction().rollback();
            throw new RuntimeException(ex);
        } finally {
            pm.close();
        }
    }
}
